FindDItem is a potentially useful call which returns the number of a dialog item given a point in local coordinates and a dialog handle. It returns an item number of -1 if no item's rectangle overlaps the point. This is all well and good, except you don't get back quite what you would expect.
The item number returned is zero-based, so you have to add one to the result:
theitem := FindDItem(theDialog, thePoint) + 1;
Further Reference: